{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Supervised Anomaly Detection with Random Forest\n",
    "\n",
    "## Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import sqlite3\n",
    "\n",
    "with sqlite3.connect('../../ch_11/logs/logs.db') as conn:\n",
    "    logs_2018 = pd.read_sql(\n",
    "        'SELECT * FROM logs WHERE datetime BETWEEN \"2018-01-01\" AND \"2019-01-01\";', \n",
    "        conn, parse_dates=['datetime'], index_col='datetime'\n",
    "    )\n",
    "    hackers_2018 = pd.read_sql(\n",
    "        'SELECT * FROM attacks WHERE start BETWEEN \"2018-01-01\" AND \"2019-01-01\";', \n",
    "        conn, parse_dates=['start', 'end']\n",
    "    ).assign(\n",
    "        duration=lambda x: x.end - x.start, \n",
    "        start_floor=lambda x: x.start.dt.floor('min'),\n",
    "        end_ceil=lambda x: x.end.dt.ceil('min')\n",
    "    )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Get training and testing sets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_X(log, day):\n",
    "    \"\"\"\n",
    "    Get data we can use for the X\n",
    "    \n",
    "    Parameters:\n",
    "        - log: The logs dataframe\n",
    "        - day: A day or single value we can use as a datetime index slice\n",
    "    \n",
    "    Returns: \n",
    "        A pandas DataFrame\n",
    "    \"\"\"\n",
    "    return pd.get_dummies(log[day].assign(\n",
    "        failures=lambda x: 1 - x.success\n",
    "    ).query('failures > 0').resample('1min').agg(\n",
    "        {'username':'nunique', 'failures': 'sum'}\n",
    "    ).dropna().rename(\n",
    "        columns={'username':'usernames_with_failures'}\n",
    "    ).assign(\n",
    "        day_of_week=lambda x: x.index.dayofweek, \n",
    "        hour=lambda x: x.index.hour\n",
    "    ).drop(columns=['failures']), columns=['day_of_week', 'hour'])\n",
    "\n",
    "def get_y(datetimes, hackers, resolution='1min'):\n",
    "    \"\"\"\n",
    "    Get data we can use for the y (whether or not a hacker attempted a log in during that time).\n",
    "    \n",
    "    Parameters:\n",
    "        - datetimes: The datetimes to check for hackers\n",
    "        - hackers: The dataframe indicating when the attacks started and stopped\n",
    "        - resolution: The granularity of the datetime. Default is 1 minute.\n",
    "        \n",
    "    Returns:\n",
    "        A pandas Series of booleans.\n",
    "    \"\"\"\n",
    "    date_ranges = hackers.apply(\n",
    "        lambda x: pd.date_range(x.start_floor, x.end_ceil, freq=resolution), \n",
    "        axis=1\n",
    "    )\n",
    "    dates = pd.Series()\n",
    "    for date_range in date_ranges:\n",
    "        dates = pd.concat([dates, date_range.to_series()])\n",
    "    return datetimes.isin(dates)\n",
    "\n",
    "def get_X_y(log, day, hackers):\n",
    "    \"\"\"\n",
    "    Get the X, y data to build a model with.\n",
    "    \n",
    "    Parameters:\n",
    "        - log: The logs dataframe\n",
    "        - day: A day or single value we can use as a datetime index slice\n",
    "        - hackers: The dataframe indicating when the attacks started and stopped\n",
    "        \n",
    "    Returns:\n",
    "        X, y tuple where X is a pandas DataFrame and y is a pandas Series\n",
    "    \"\"\"\n",
    "    X = get_X(log, day)\n",
    "    y = get_y(X.reset_index().datetime, hackers)\n",
    "    return X, y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Train on January 2018; test on February 2018:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train, y_train = get_X_y(logs_2018, '2018-01', hackers_2018)\n",
    "X_test, y_test = get_X_y(logs_2018, '2018-02', hackers_2018)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Random Forest\n",
    "Accepting all the defaults."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "rf = RandomForestClassifier(random_state=0, n_estimators=100).fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluate the Model\n",
    "Performance is pretty good:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "       False       1.00      1.00      1.00     37787\n",
      "        True       0.92      0.75      0.83        16\n",
      "\n",
      "   micro avg       1.00      1.00      1.00     37803\n",
      "   macro avg       0.96      0.87      0.91     37803\n",
      "weighted avg       1.00      1.00      1.00     37803\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "\n",
    "print(classification_report(y_test, rf.predict(X_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Examine the plots:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0.98, 'Random Forest Classifier')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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zMYA3YD6ZpYGDAZSANz9OWAicA7wM7AduLK4YhER2S/usGzZvvK0rBK17duj21WsCB06RCeODjssx3KIO+44iZUrt3LLLcfTokWdEjgREREptCSVtpU0XU+ISFly9NFH88orr3Dttddy+OGHc/3117Nhwwbatm1LamoqncIxUPfs2cNll13Gpk2bcHduueUWateuzT333MMf//hH2rVrh7uTmprKe+/lXHqXkzPPPJN58+ZxwgknAFC9enVGjhxZpIkk8+x3z0u54447zmfOnJnoMESkPNuyJbZEbeXK2HaHHRadNOrQASK6l8YzfPhqNDqlAAAgAElEQVR3nHfeEdSvX7XIwzazWe5+XJHvuIyp0vGmsvXFJsVmw4xnEh2ClCKVk/dv+Lkq3R8q1GdL+uS7lIEqZXQ9IfulVy8YPx7GjQueS8LNmzePo48+OtFhlDnx3rf8Xk8ksrRNRCTxMjLgxx+jk0Zz58aWqNWpEySLOnfe92/9+vk+zO7de/jDH/7Dv/41k1NPbc7kyQNJ0t1tEREREREpY5RIEpEDS1padNJo5szYErWUlNgStZYtCz1jz7p127noojf45JPFVKxYgauv7qgkkohIWaNZ20RERAAlkkSkPNuyJUgUZSWNpk+H5XEmczn00NgStcqViySEefPWcP75Y1i4cAONGlVj3Li+HH98kyLZt4iIlCANti0iIgIokSQi5cWePfFL1DIzo9vVrr2vPC2rRK1Bg2IJaeLEBfTr9xabN++kY8eDePfdvjRtWqtYjiUiIsVMPZJEREQAJZJEpKz69dfYErVt26LbJCfDMcdE9zY6/PASuxj47LMlbN68kwsvbMXw4b2oVq1iiRxXRESKgXokiYiIAEokiUhZsHXrvhK16dODf3/9NbZdixbRSaOOHYusRK0wHnrodNq2bUTfvm00JpKISFmnHkkiIiKAEkkiUtrs2ROUpEX2Nvrxx9gStVq1YkvUGjZMTMyh1au38fvff8CTT/bgoIOqk5RkXHpp24TGJCIiRUQ9kkREpASkpqYyc+ZM6ucyQ3R+2hQnJZJEJLGWL48tUdu6NbpNcnLQuyh7iVpS6flRP3v2Snr2fI2lSzeRkZHJm29enOiQRESkKKlHkoiICKBEkoiUpG3bYkvU0tJi26WmxpaoValS4uHm17hx87nssrfZtm03XbocwtNPn53okEREpKipR5KIiORg8eLF9OjRg65du/L111/Tvn17rrzySgYPHszq1asZNWoULVu25KqrruKXX36hatWqDBs2jHbt2rFu3Tr69evHmjVr6Ny5M+6+d78jR45k6NCh7Nq1iy5duvDss89SoUKFBJ5pQIkkESkee/bAvHnRvY3mzIktUatZM7ZErVGjxMRcQO7Oww9/zl13TQbgssva8cIL51O5sj5aRUTKHfVIEhGRXPz888+88cYbDBs2jE6dOjF69Gg+//xzxo8fz1//+leaNm1Kx44dGTduHJMnT2bAgAF899133HfffXTt2pV7772X999/n2HDhgEwb948Xn/9db744gtSUlK44YYbGDVqFAMGDEjwmSqRJCJFZcWK6KTRjBnxS9Q6dIhOGh15ZKkqUcsvd+fyy99h1KgfMIOHHz6dO+44CdOFhohI+aQeSSIipV9x/RaP6CWUkxYtWtC2bTA+auvWrTn99NMxM9q2bcvixYtZsmQJb731FgDdu3dn3bp1bNq0ialTp/L2228DcO6551KnTh0APv74Y2bNmkWnTp0ASE9Pp2GCx4TNokSSiBTctm0wa9a+pNH06bBsWWy75s2jS9SOOaZUl6gVhJlx+OF1qVYthdGj+9Cz55GJDklERIqTEkkiIpKLSpUq7X2elJS093VSUhIZGRkkJ8emX7JuQse7Ge3uDBw4kIcffriYIi48JZJEJHeZmfFL1PbsiW5XsyZ06hSdOCojJWoFsWvXHipWDOqS77nnVAYMaE+LFnUSHJWIiBQ79TgVESkZu3cHN6kXL4ZFi4J/N22CW26BFi1y3zYfPYcS5ZRTTmHUqFHcc889TJkyhfr161OzZs29y++++24++OADNmzYAMDpp59Or169uOWWW2jYsCHr169ny5YtNG/ePMFnokSSiGS3cmVsidqWLdFtKlTYN4ta1vhGRx1VJkvUCuL11+fwl79M5tNPr6BJk5okJZmSSCIiBwr1SBIRKRp79gQzN2clirKSRVn/LlsWO64qQLVqUAp75+TXkCFDuPLKK2nXrh1Vq1bllVdeAWDw4MH069ePY445hlNPPZVmzZoB0KpVKx588EHOPPNMMjMzSUlJ4Z///KcSSSKSYNu37ytRy5pFbenS2HbNmsWWqFWtWvLxJkhmpjNkyBQeeGAqAK++Ops77zw5wVGJiEiJUo8kEZH8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gOuuC/VDuuWWExk+vAcpKfrJTCTBXAjsAI4Erov42m+Au3utoIKJiARFq7aJiIiERFtIWmVmnQE3syrAtcDX8YslldUFF7Rl9OiPufHG4zn//DZBxxGRIri7ut2LiOxFXxhFRERCoi0kXUloeltTYD0wM3xMpERff53F4YfXJi2tKrVqpfHRR0O0KpuIiIhUKBqRJCIiEhLV3by7b3D3THevF94y3X1TvMNJxTdjxtd07DiCK698BXcHUBFJREREKhw12xYREQmJakSSmY0EfO/j7j60zBNJpeDuPPTQ+9x000zcYefOXPLyCkhNrRJ0NBEREZH9phFJIiIiIdFObZsZ8TgdOAdYVfZxpDLIzs5j2LAZPPvspwAMH34Kt956kn4AExERkQpL46lFRERCoiokufuEyH0zew54My6JpEL73/+2c+65E/jgg9XUqJHKc8+dw7nnHh10LBEREZFS0S/EREREQqIdkbS35sDhZRlEKofhw9/hgw9W06RJLaZPH0i7docEHUlERESk1FRGEhERCYm2R9IWfuqRlAJsBv4cr1BScT344G/ZvTufe+/tQcOGBwYdR0RERKRMaECSiIhISImFJAuN4z0WWBM+VOB7lt+SpOfujBq1iEGD2lK9eioHHFCNkSN7Bx1LREREpEylaEySiIgIEEXfwHDRaIq754c3FZEECK3ENnDgSwwdOoPLL3856DgiIiIicWMW2yYiIlLZRNsjaZ6ZHefui+KaRiqMNWt+JCNjPAsXrqNmzWpkZrYOOpKIiIhI3JhGJImIiAAlFJLMrKq75wEnApeb2bfADkL9Bt3djyuHjJJg5s1bQ58+41m3bjtHHFGH6dMzOeaYBkHHEhEREYkbjS4SEREJKWlE0jzgOKBPOWSRCuCFFz7n0kunkZOTT/fuzZg4sT/16tUIOpaIiIiIiIiIlIOSCkkG4O7flkMWqQBeeeUbcnLyGTasA489diapqVWCjiQiIiISd2q2LSIiElJSIam+md24ryfd/eEyziMJbtSos+nVqyWZma0xjfEWERGRJKEfe0REREJKWrWtCnAgUHMfm1Ryy5dv5YILJrN9+24AqldPZeDANioiiYiISFLRqm0iIiIhJY1IWufu95RLEkk4c+eu5JxzJrBp007q16/BP/5xRtCRRERERAKhVdtERERCouqRJMlnzJiPueKKGeTm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EqKqRhxkZ+cxbNgMnn32UwA++eR/hYUkEfm51atXU7NmTZo1a4bp170lcneysrJYvXo1zZvr64qISLnRtygRERFAhaQy97//befccyfwwQerqVEjlbFjz+Gcc44OOpZIwsrOzlYRaT+YGQcffDAbN24MOoqISFJRjyQREZEQFZLK0McfryMjYzyrVv1I06a1mTYtk3btDgk6lkjCUxFp/+jvS0Sk/OlLr4iISEhK0AEqi9278wuLSN26NWH+/MtVRBKpIJYvX07r1q3j8t5vv/02vXr1AmD69Ok88MADcfk8IiISXxbjJiIiUtloRFIZqVatCs8804fnn/+cJ544i7Q0/dWKyM/17t2b3r17Bx1DRERioaqQiIgIoBFJpbJzZy6vvPJ14f4ppzRn1KjeKiKJVEB5eXlcfPHFtG3bln79+rFz507uueceOnXqROvWrRk6dCjuDsCjjz5Kq1ataNu2LZmZmQDs2LGDSy+9lE6dOtG+fXumTZv2i8/x9NNPc8011wAwePBgrrvuOk444QSOOOIIJk2aVHje3/72Nzp16kTbtm258847y+HqRUSkJBbjHxERkcpGFY8YrV79IxkZ4/nkk//xyivnc8YZLYKOJFIpmN29z+eeeqoXQ4d2AGDEiIUMGzZjn+e6718B5quvvmL06NF069aNSy+9lCeffJJrrrmGO+64A4ALL7yQGTNmcPbZZ/PAAw/w/fffk5aWxtatWwG477776NGjB2PGjGHr1q107tyZ0047rdjPuW7dOubOncuXX35J79696devH2+88QbffPMN8+bNw93p3bs3c+bM4eSTT96v6xEREREREYkHjUiKwUcfraZTp5EsWrSOZs0OomnT2kFHEpFSatKkCd26dQNg0KBBzJ07l7feeosuXbrQpk0bZs+ezZIlSwBo27YtF1xwAWPHjqVq1VA9/o033uCBBx6gXbt2dO/enezsbFauXFns5+zTpw8pKSm0atWK9evXF77PG2+8Qfv27TnuuOP48ssv+eabb+J45SIiEg2z2DYREZHKRiOS9tPYsZ8xZMh0cnLy6d69GZMm9efgg2sEHUuk0oh2JNHQoR0KRyeVhb1XQjMzrrrqKhYsWECTJk246667yM7OBuCVV15hzpw5TJ8+neHDh7NkyRLcnZdeeomjjjrqZ++zp0BUlLS0tMLHe6bNuTs333wzw4YNK6tLExGRMqCakIiISIhGJEWpoMC5+eaZXHjhFHJy8hk2rANvvDFIRSSRSmLlypV88MEHAIwbN44TTzwRgHr16rF9+/bCHkYFBQWsWrWKU045hQcffJCtW7eyfft2evbsyWOPPVZYEPr4449jytGzZ0/GjBnD9u3bAVizZg0bNmwo7eWJiEgpaUSSiIhIiApJUVq/fjujR39MlSrG44+fyb/+9TtSU6sEHUtiMGXKFMyML7/8svBY5BLtewwePLiweJCbm8uf//xnWrZsSevWrencuTOvvfZasZ8nJyeHAQMG0KJFC7p06cLy5cuLPO+RRx7hmGOOoXXr1gwcOLBw1MtJJ51Eu3btaNeuHY0aNaJPnz6luGopydFHH80zzzxD27Zt2bx5M1deeSWXX345bdq0oU+fPnTq1AmA/Px8Bg0aRJs2bWjfvj033HADBx10ELfffju5ubm0bduW1q1bc/vtt8eU4/TTT+f888/n+OOPp02bNvTr149t27aV5aWKiEhMLMZNRESkctHUtigdemhNpkwZwK5deZx22hFBx5FS2DPaZPz48dx1111Rveb2229n3bp1LF68mLS0NNavX88777xT7GtGjx5NnTp1WLZsGePHj+emm25iwoQJPztnzZo1PProoyxdupTq1atz3nnnMX78eAYPHsy7775beF7fvn3JyMjY72uV6DRr1oylS5f+4vi9997Lvffe+4vjc+fO/cWx6tWr89RTT/3iePfu3enevTsQKk4OHjwYCK3gFmnPCCSA66+/nuuvv34/rkBEROJNo4tERERCNCKpGHPnruTRRz8q3O/WramKSBXc9u3bee+99xg9ejTjx4+P6jU7d+5k5MiRPPbYY4U9bRo2bMh5551X7OumTZvGxRdfDEC/fv2YNWtW4bSnSHl5eezatYu8vDx27txJo0aNfvb8tm3bmD17tkYkiYiIBEjjkUREREJUSNqH0aMX0aPHM1x//X95990VQceRMjJ16lTOOOMMjjzySOrWrcuiRYtKfM2yZcto2rQptWrVKvL5IUOGsGDBgl8cX7NmDU2aNAGgatWq1K5dm6ysrJ+dc9hhh/HHP/6Rpk2bcuihh1K7dm1OP/30n50zZcoUTj311H1+fhEREYk/9UgSEREJUSFpL3l5Bdx44+sMGfIyubkF/P73XTj++CZBx5IyMm7cODIz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\n",
      "text/plain": [
       "<Figure size 1440x360 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from ml_utils.classification import confusion_matrix_visual, plot_pr_curve, plot_roc\n",
    "\n",
    "fig, axes = plt.subplots(1, 3, figsize=(20, 5))\n",
    "plot_roc(y_test, rf.predict_proba(X_test)[:,1], ax=axes[0])\n",
    "confusion_matrix_visual(y_test, rf.predict(X_test), ax=axes[1], class_labels=[False, True])\n",
    "plot_pr_curve(y_test, rf.predict_proba(X_test)[:,1], ax=axes[2])\n",
    "plt.suptitle('Random Forest Classifier')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
